package mysql8学习.高级.第12章_数据库调优的其他策略;

/**
 * 3.5 优化插入记录的速度
 * 插入记录时，影响插入速度的主要是索引、唯一性校验、一次插入记录条数等。
 * 根据这些情况可以分别进行优化。这里我们分为MyISAM引擎和InnoDB存储引擎来讲。
 * 1. MyISAM引擎的表:
 *
 * ① 禁用索引
 *   对于非空表，插入记录时，MySQL会根据表的索引对插入的记录建立索引。
 *   如果插入大量数据，建立索引就会降低插入记录的速度。
 *   为了解决这种情况，可以在插入记录之前禁用索引，数据插入完毕后再开启索引。
 *   禁用索引的语句如下:
 *   ALTER TABLE table_name DISABLE KEYS;
 *   重新开启索引的语句如下:
 *   ALTER TABLE table_name ENABLE KEYS;
 *   若对于空表批量导入数据，则不需要进行此操作，因为MyISAM引擎的表是在导入数据之后才建立索引的。
 *
 * ② 禁用唯一性检查
 *   插入数据时，MySQL会对插入的记录进行唯一性校验。 这种唯一性校验会降低插入记录的速度。
 *   为了降低这种情况对查询速度的影响，可以在插入记录之前禁用唯一性检查, 等到记录插入完毕后再开启。
 *   禁用唯一性检查的语句如下:
 *   SET UNIQUE_CHECKS=0;
 *   开启唯一性检查的语句如下:
 *   SET UNIQUE_CHECKS=1 ;
 * ③ 使用批量插入
 *   插入多条记录时，可以使用一条INSERT语句插入一条记录， 也可以使用一条INSERT语句插入多条记录。
 * ④ 使用LOAD DATA INFILE批量导入
 *   当需要批量导入数据时，如果能用 LOAD DATA INFILE 语句，就尽量使用。
 *   因为 LOAD DATA INFILE 语句导入数据的速度比INSERT语句快。
 *
 * 2. InnoDB引擎的表:
 * ① 禁用唯一性检查
 *   插入数据之前执行set unique_checks=0 来禁止对唯一索引的检查,
 *   数据导入完成之后再运行set unique_checks=1. 这个和MyISAM引擎的使用方法--样。
 * ② 禁用外键检查
 *   插入数据之前执行禁止对外键的检查，数据插入完成之后再恢复对外键的检查。禁用外键检查的语句如下:
 *   SET foreign_key_checks=0 ;
 *   恢复对外键的检查语句如下:
 *   SET foreign_key_checks=1 ;
 * ③ 禁止自动提交
 *   插入数据之前禁止事务的自动提交，数据导入完成之后，执行恢复自动提交操作。
 *   禁止自动提交的语句如下:
 *   set autocommit=0;
 *   恢复自动提交的语句如下:
 *   set autocommit=1 ;
 *
 */
public class C5_优化插入记录的速度 {
}
